package com.yungu.swift.assets.driver.model.dto;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yungu.swift.base.model.BaseDto;
import com.yungu.swift.base.model.annotation.AbsoluteImgPath;
import com.yungu.swift.base.model.annotation.Desensitization;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

/**
 * 司机表
 **/
@Data
public class DriverDto extends BaseDto {

    /**
     * 微信授权 ID
     */
    private String openId;
    /**
     * 司机类型（1出租车，2专车，3跨城拼车 4快车 5小件）
     **/
    private Integer businessType;
    /**
     * 手机号码
     **/
    @Desensitization(type = Desensitization.DesensitionType.MOBILE)
    private String mobile;
    /**
     * 姓名
     **/
    @Desensitization(type = Desensitization.DesensitionType.NAME)
    private String name;
    /**
     * 密码
     **/
    @JsonIgnore
    private String password;
    /**
     * 头像
     **/
    @AbsoluteImgPath
    private String face;
    /**
     * 性别 1.男、2.女
     **/
    private Integer sex;
    /**
     * 城市uuid
     **/
    private String cityUuid;
    /**
     * 车辆uuid
     **/
    private String carUuid;
    /**
     * 公司uuid
     **/
    private String companyUuid;
    /**
     * 代理uuid
     **/
    private String agentUuid;
    /**
     * 上下班状态（1：下班、2：上班）
     **/
    private Integer isWork;
    /**
     * 司机状态(1:正常、2:短期封号、3:长期封号、4:未审核、5:删除)
     **/
    private Integer status;
    /**
     * 平均分
     **/
    private Double score;
    /**
     * 终止时间（针对短期封号>status）
     **/
    private Date abortTime;
    /**
     * 封号备注
     **/
    private String abortRemark;
    /**
     * 是否首次登录 1：是、2：否
     **/
    private Integer isFirst;
    /**
     * app登录后生成tokenId
     **/
    private String token;
    /**
     * 账号余额
     **/
    private Double balance;
    /**
     * 司机成功订单总数
     **/
    private Integer orderCount;
    /**
     * 最后一次登录时间
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date lastLogin;
    /**
     * 推送id
     **/
    private String pushId;
    /**
     * 设备类型（1.android，2.IOS）
     **/
    private Integer deviceType;
    /**
     * 设备唯一标识
     **/
    private String deviceToken;
    /**
     * 设备版本
     **/
    private String deviceVersion;
    /**
     * 使用的app版本
     **/
    private String appVersion;
    /**
     * 当前经度
     **/
    private Double currentLng;
    /**
     * 当前纬度
     **/
    private Double currentLat;
    /**
     * 当前角度
     **/
    private String currentAngle;
    /**
     * 推送等级（1：最低，9999：最高）
     **/
    private Integer pushLevel;
    /**
     * 听单模式(1:全部、2:实时、3:预约)
     **/
    private Integer remindType;

    /**
     * 向下听单(0:不允许、1:允许)
     **/
    private Integer listenDown;

    /**
     * 顺路模式(0:关闭、1:开启)
     **/
    private Integer sameWayModel;

    /**
     * 不接火车站订单(0:关闭、1:开启)
     **/
    private Integer rejectStationOrder;

    /**
     * 顺路地址
     */
    private String sameWayAddress;

    /**
     * 顺路地址经度
     */
    private Double sameWayLng;

    /**
     * 顺路地址纬度
     */
    private Double sameWayLat;

    /**
     * 预约时间段 开始
     **/
    private String appointTimeStart;
    /**
     * 预约时间段 结束
     **/
    private String appointTimeEnd;
    /**
     * 驾驶证扫描件
     **/
    private String licencePic;
    /**
     * 身份证号
     **/
    @Desensitization(type = Desensitization.DesensitionType.ID_CARD)
    private String idCard;
    /**
     * 出生日期
     **/
    private Date driverBirthday;
    /**
     * 国籍，默认156中国
     **/
    private String driverNationality;
    /**
     * 驾驶员民族
     **/
    private String driverNation;
    /**
     * 驾驶员婚姻状况10.未婚，20已婚，40离婚
     **/
    private Integer driverMaritalStatus;
    /**
     * 驾驶员外语能力 1.精通，2.熟练，3.良好，4.一般
     **/
    private Integer driverLanguageLevel;
    /**
     * 驾驶员学历 19.研究生,21.大学本科，31大学专科，41中等专科毕业,61普通高中毕业，71初中毕业，81小学毕业
     **/
    private Integer driverEducation;
    /**
     * 户口登记机关名称
     **/
    private String driverCensus;
    /**
     * 户口住址或长住地址
     **/
    @Desensitization(type = Desensitization.DesensitionType.ADDRESS)
    private String driverAddress;
    /**
     * 驾驶员通信地址
     **/
    @Desensitization(type = Desensitization.DesensitionType.ADDRESS)
    private String driverContactAddress;
    /**
     * 驾驶员照片文件编号
     **/
    private String photoId;
    /**
     * 机动车驾驶证号
     **/
    @Desensitization(type = Desensitization.DesensitionType.ID_CARD)
    private String licenseId;
    /**
     * 机动车驾驶证扫描件文件编号
     **/
    private String licensePhotoId;
    /**
     * 准驾车型
     **/
    private String driverType;
    /**
     * 初次领取驾驶证日期
     **/
    private Date getDriverLicenseDate;
    /**
     * 驾驶证有效期限起
     **/
    private Date driverLicenseOn;
    /**
     * 驾驶证有效期限止
     **/
    private Date driverLicenseOff;
    /**
     * 是否巡游出租汽车驾驶员1：是、0：否
     **/
    private Integer taxiDriver;
    /**
     * 网络预约出租汽车驾驶员资格证号
     * 出租车：从业资格证号
     **/
    private String certificateNo;
    /**
     * 网络预约出租汽车驾驶员证发证机构
     * 出租车：从业资格证发证机构
     **/
    private String networkCarIssueOrganization;
    /**
     * 资格证发证日期
     * 出租车：从业资格证发证日期
     **/
    private Date networkCarIssueDate;
    /**
     * 初次领取资格证日期
     * 出租车：从业资格证初次领证日期
     **/
    private Date getNetworkCarProofDate;
    /**
     * 资格证有效起始日期
     * 出租车：从业资格证有效起始日期
     **/
    private Date networkCarProofOn;
    /**
     * 资格证有效截止日期
     * 出租车：从业资格证有效期止
     **/
    private Date networkCarProofOff;
    /**
     * 报备日期
     **/
    private Date registerDate;
    /**
     * 是否专职驾驶员1：是、0：否
     **/
    private Integer fullTimeDriver;
    /**
     * 是否在驾驶员黑名单内1：是、0：否
     **/
    private Integer inDriverBlacklist;
    /**
     * 服务类型1：网络预约出租车、2：巡游出租车、3：私人小客车合乘
     **/
    private Integer commercialType;
    /**
     * 驾驶员合同（或协议）签署公司
     **/
    private String contractCompany;
    /**
     * 合同签订日期
     **/
    private Date contractSign;
    /**
     * 合同（或协议）有效期起
     **/
    private Date contractOn;
    /**
     * 合同（或协议）有效期止
     **/
    private Date contractOff;
    /**
     * 紧急情况联系人
     **/
    private String emergencyContact;
    /**
     * 紧急情况联系人电话
     **/
    private String emergencyContactPhone;
    /**
     * 紧急情况联系人通信地址
     **/
    @Desensitization(type = Desensitization.DesensitionType.ADDRESS)
    private String emergencyContactAddress;
    /**
     * 状态0：有效、1：失效
     **/
    private Integer state;
    /**
     * 手持身份证照
     **/
    @AbsoluteImgPath
    private String driverIdCardImg;
    /**
     * 银行账号
     **/
    @Desensitization(type = Desensitization.DesensitionType.BANK_NO)
    private String bankAccount;
    /**
     * 银行开户名称
     **/
    private String bankAccountName;
    /**
     * 开户银行
     **/
    private String bankName;
    /**
     * 银行地址
     **/
    private String bankAddress;
    /**
     * 银行卡照片
     **/
    @AbsoluteImgPath
    private String bankPhoto;
    /**
     * 驾驶证照片
     **/
    @AbsoluteImgPath
    private String driverLicenseImg;
    /**
     * 交通违章次数
     **/
    private Integer trafficViolationsCount;
    /**
     * 交通事故次数
     **/
    private Integer trafficAccidentCount;
    /**
     * 身份证背面照片地址
     **/
    @AbsoluteImgPath
    private String idCardBackImg;
    /**
     * 身份证正面照片地址
     **/
    @AbsoluteImgPath
    private String idCardFaceImg;
    /**
     * 驾驶证主页照片地址
     **/
    @AbsoluteImgPath
    private String drivingLicenceHomeImg;
    /**
     * 驾驶证副页照片地址
     **/
    @AbsoluteImgPath
    private String drivingLicenceSubImg;
    /**
     * 驾驶证PDF
     **/
    @AbsoluteImgPath
    private String drivingLicencePDF;
    /**
     * 合同类型
     **/
    private String contractType;
    /**
     * 合同扫描件
     **/
    @AbsoluteImgPath
    private String contractPhoto;
    /**
     * 司机分组
     */
    private String driverNo;
    /**
     * 司机唯一规则编号
     */
    private String driverUniqueId;
    /**
     * 是否激活，0未激活1已激活
     */
    private Integer active;
    /**
     * 体检报告
     */
    @AbsoluteImgPath
    private String examinateReport;
    /**
     * 资格证照片
     */
    @AbsoluteImgPath
    private String certificateImage;


    //附加字段
    //总里程
    private Double serviceMileage;
    //总收入
    private Double totalIncome;
    //代理名称
    private String agentName;
    //公司名称
    private String companyName;
    //车牌号
    private String plateNum;
    //颜色
    private String carColor;
    //品牌
    private String brandName;
    //车辆级别
    private String carModelUuid;
    //星级
    private Double starCount;
    //国际电话国别代码
    private String countryMobileCode;

    /**
     * 建立司机和培训信息的一对多的关系
     */
    private List<DriverTrainDto> driverTrainDtoList;

    /**
     * 离职时间
     **/
    private Date dimissionTime;

    /**
     * 离职备注
     **/
    private String dimissionRemark;

    /**
     * 查询条件合集（司机编号，姓名，联系方式）
     */
    private String conditions;

    /**
     * 被邀请进入的渠道id
     */
    private String channelUuid;

    /**
     * 审核记录uuid
     */
    private String driverCheckUuid;

    /**
     * /运营商，手版本，app版本更新时间
     */
    private Date supervisionUpdateTime;
    /**
     * 网络类型（1：移动、2：联通、3：电信、0：未知）
     */
    private Integer netType;

    /**
     * 缓存的登录时间
     */
    private Date cacheLoginTime;

    /**
     * 是否有正在执行的订单
     */
    private Integer executeOrderStatus;

    /**
     * 最近一次下班时间
     */
    private Date lastOffWorkTime;

    /**
     * 最新的上班时间
     */
    private Date latestOnWorkTime;

    /**
     * 重置密码时间
     */
    private Date resetPasswordTime;

    /**
     * 网络预约出租车司机资格证照片
     */
    @AbsoluteImgPath
    private String networkCarCertificationImg;
}
